Vue3 基础 – 快速上手 & 常用指令 & :key 的原理

1. 在 HTML 网页中使用 vue3 的3个基本步骤

  1. 通过 script 标签的 src 属性,在当前网页中全局引入 vue3 的脚本文件:

  2. 创建 vue3 的单页面应用程序实例:

  3. 声明 vue3 的单页面应用程序实例,实际要控制的页面区域:

2. 定义和渲染数据

  1. 在调用 createApp() 函数时,可以提供一个对象作为配置参数,例如:

  2. 如果想提供要渲染的数据,可以在步骤1的配置对象中,通过 data 节点提供渲染期间要使用的数据:

  3. 在步骤2的 data 节点中,定义一个名为 name 的数据,值是 liulongbin

  4. 在 vue3 控制的模板结构中,使用 {{ 数据名 }} 语法,把数据渲染出来:

  5. 拓展:当我们修改 data 节点下的数据后,即可看到页面上的 HTML 内容会自动被刷新。这就是 vue 的强大之处:数据驱动视图。修改 data 数据的示例代码如下:

3. vue3 中常用的渲染指令

在 vue 中,指令是带有 v- 前缀的特殊 attribute,它是 vue 提供的特殊语法,大家有必要掌握 vue 中常用指令的使用。

指令能够辅助前端程序员高效地把数据渲染为 HTML 的结构,而程序员不需要调用任何操作 DOM 的 API。

3.0 常用指令的分类

  1. 内容渲染指令
  2. 属性绑定指令
  3. 双向绑定指令
  4. 条件渲染指令
  5. 事件绑定指令
  6. 列表渲染指令

3.1 内容渲染指令

1. 插值表达式

插值表达式(又叫做:Mustache)的语法为 {{ }},vue 在解析模板期间,会把 {{ }} 所在的位置,替换为对应的数据值,例如:

vue 会把 name 的值,替换到 {{ name }} 所在的位置。

注意:插值表达式 {{ }} 是唯一一个不以 v- 前缀开头的指令。

2. v-text

v-text 指令用来填充 HTML 元素的内容,如果 HTML 元素内部有其它内容存在,则会被覆盖掉。语法格式如下:

对应的数据为:

注意:由于 v-text 指令存在覆盖已有内容的问题,所以在实际开发中它很少被用到。最常用的还是 {{ }} 插值表达式,因为它只是占位符,不会覆盖已有内容。

3. v-html

v-html 指令用来渲染带有 HTML 标记的文本内容,它可以把 HTML 标记解析为真正的 HTML 元素,并插入到模板中渲染。

而插值表达式和 v-text 指令只会把 HTML 标记渲染为纯文本,而不是 HTML。

v-html 的语法格式如下:

对应的数据为:

3.2 属性绑定指令

1. v-bind

v-bind 指令用来为元素的属性绑定动态的属性值。指令语法如下:

对应的数据为:

又例如,为图片的 src 属性动态绑定属性的值:

对应的数据为:

2. v-bind 的简写

在实际开发中,v-bind 指令的使用频率非常高,为了简化它的写法,vue 规定 v-bind 指令可以简写为英文的 : 且二者是完全等价的。如上面的例子可以使用 : 简写为:

对应的数据为:

注意:今后在 vue 项目开发中,只要看到某个属性前面出现了英文的 : 那么,一定是为这个属性绑定了动态的值。

3. 绑定布尔值

在 vue 中,某些属性的取值可以是布尔值 true 或 false,表示当前的属性是否应该应用于当前的元素。例如 disabled 属性:

与之类似的,还有 radio 和 checkbox 的 checked 属性:

另外,表单元素 select 下的 option 选项的 selected 属性,也可以绑定布尔值:

4. 动态绑定多个值

如果要为某个元素同时绑定多个动态的属性值,可以把多个动态属性封装为一个 JavaScript 对象:

通过不带参数的 v-bind 指令,即可方便的把 attrsObj 对象中封装的属性,一次性绑定到对应的元素上:

注意:不带参数的 v-bind 指令,指的是省略了 :属性名 的用法。

5. 拓展:使用 JavaScript 表达式

  1. 在 vue 的数据绑定中,除了支持简单的属性名绑定之外,还支持完整的 JavaScript 表达式绑定

  2. 例如,以下这些都属于简单的属性名绑定,它们是直接把 data 中数据项的名字,绑定到了模板中:

  3. 除此之外,还支持表达式的绑定,例如:

    对应的数据如下:

3.3 双向绑定指令

v-model 双向绑定指令,简化了表单元素赋值和取值操作。

v-model 的作用:

  1. data 数据源发生变化,自动重新渲染页面
  2. 表单数据发生变化,自动更新到 data 数据源中

1. 文本框的双向绑定

input 元素通过 v-model 指令,可以方便地进行赋值和取值,示例代码如下:

对应的数据如下:

2. 多行文本框的双向绑定

textarea 元素通过 v-model 指令,可以方便地进行赋值和取值,示例代码如下:

对应的数据如下:

3. 复选框的双向绑定

  1. 单一复选框的双向绑定,绑定的是布尔类型的值:

    对应的数据如下:

  2. 多个复选框的双向绑定,绑定的是数组类型的值,而且每个 checkbox 必须通过 value 属性提供选中项的值

    对应的数据如下:

4. 单选按钮的双向绑定

单选按钮的特点是多选一,所以对单选按钮进行双向绑定时,需要把多个单选按钮通过 v-model 指令绑定到同一个数据源,并通过 value 属性指定选中后的值:

对应的数据如下:

5. 选择器的双向绑定

  1. 单选选择器的双向绑定,只允许选中一个值:

    对应的数据如下:

  2. 多选选择器的双向绑定,允许选中多个值,所以需要绑定数组格式的数据源:

    对应的数据如下:

6. v-model 的 .lazy 修饰符

默认情况下,v-model 会在每次 input 事件后更新数据。可以添加 .lazy 修饰符来改为在每次 change 事件后更新数据:

7. v-model 的 .number 修饰符

如果你想让用户输入自动转换为数字,你可以在 v-model 后添加 .number 修饰符来管理输入:

注意:

  1. 如果该值无法被 parseFloat() 处理,那么将返回原始值。
  2. number 修饰符会在输入框有 type="number" 时自动启用。

8. v-model 的 .trim 修饰符

如果你想要默认自动去除用户输入内容中两端的空格,你可以在 v-model 后添加 .trim 修饰符:

3.4 条件渲染指令

条件渲染指令用来条件性地渲染页面上的某一部分内容。只有表达式的条件成立,才会真正渲染这一部分的内容。

常用的条件渲染指令是 v-ifv-elsev-else-if。其中,v-if 指令可以单独使用,也可以结合 v-elsev-else-if 指令实现两个多个条件的按需渲染。

1. v-if 的使用

v-if 的语法格式如下:

其中,只有表达式的返回值为 true 时,才会真正渲染被 v-if 指令控制的 div 元素。

如果 v-if 的表达式返回值为 false,则被 v-if 指令控制的 div 不会被渲染到浏览器中。

例如:

对应的数据为:

2. v-if 结合 v-else 的使用

v-if 指令可以结合 v-else 指令一起使用。

条件为真时渲染被 v-if 指令控制的元素,当条件为假时渲染被 v-else 指令控制的元素。例如:

注意:v-else 指令不需要通过 = 指定相应的表达式,因为 v-else 是兜底的条件,只要前面的所有条件都不满足,那么必然会触发 v-else 的执行。

3. v-if 结合 v-else-if 和 v-else 的使用

v-if 指令可以结合 v-else-ifv-else 指令一起使用,从而组成复杂的条件渲染逻辑。

v-if 或某个 v-else-if 相应的条件为真时,被控制的元素才会被渲染。

最后的 v-else 依然是兜底的条件,当所有的 v-ifv-else-if 条件都不成立时,才会触发 v-else 的执行。例如:

对应的数据为:

4.